package com.tduck.cloud.report.data.params;


import com.tduck.cloud.report.data.enums.AggsTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * 分组查询参数
 *
 * @author tduck
 */
@Data
public class GroupQueryParams extends BasicQueryParams{


    /**
     * 分组字段
     */
    private List<GroupField> groupByFields = new ArrayList<>();

    /**
     * 聚合字段
     */
    private List<AggregateField> aggregateFields = new ArrayList<>();


    /**
     * 排序
     */
    private List<SortField> sortFields = new ArrayList<>();



    /**
     * 默认返回前50
     */
    private Integer limit;


    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class GroupField {
        /**
         * 字段名
         */
        private String name;
        /**
         *  日期格式化参数
         */
        private String dateFormat;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class AggregateField {
        /**
         * 字段名
         */
        private String name;
        /**
         * 聚合类型 sum avg max min count
         */
        private AggsTypeEnum aggregateType;
    }


    @Data
    public static class SortField {
        /**
         * 字段名
         */
        private String name;
        /**
         * 排序类型
         */
        private SortTypeEnum sortType;
    }

    public static enum SortTypeEnum {
        /**
         * 升序
         */
        ASC,
        /**
         * 降序
         */
        DESC;
    }

}
